Repository navigation
Conversation
…ogy discovery Adds three read-only Steampipe inventory types used by topology discovery: - eni: interface type, description, requester, attachment and private IPs, so a load-balancer IP target can be attributed to the resource owning its ENI - rds_cluster: writer/reader/custom endpoints and members, so trace DB hosts can bind to Aurora clusters - rds_proxy: the proxy endpoint and placement; the auth column (secret ARNs) is not collected The RDS instance query also carries db_cluster_identifier. Existing ec2:Describe* and rds:Describe* grants cover the new tables. The release catalog pin and the runbook counts move from 46 to 49 types. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🤖 AI Code Review (two independent reviewers)Reviewer responses: codex/ALL claude/ALL Status: BLOCKED — CRITICAL/MAJOR issues must be resolved before merge All verification is complete. Final synthesized chair review: Chair Synthesis — PR #257: feat(inventory): collect ENIs, RDS clusters and RDS Proxies for topology discovery1. SummaryThe PR adds three read-only Steampipe inventory types ( 2. Issues per lensL2 — Code correctnessMAJOR (claude flagged; codex missed; chair CONFIRMED against base code) — The three new types silently distort the fleet-overview KPIs. Chair-verified: MINOR (claude only) — MINOR (claude only) — MINOR (claude only) — Chair-verified non-issues: the L3 — Security / AWS mutation safetyNo findings — both models agree; chair concurs. All three additions are plain read-only L4 — Observability / data-integration correctnessMAJOR (both models flagged the same fact — claude MAJOR, codex MINOR; chair adopts MAJOR) — The ENI query's documented data contract is false as shipped. The comment states "IPv6 and public ( MINOR (codex flagged MAJOR; claude did not flag; chair downgrades to MINOR) — MINOR (claude only) — The strict 49-type zero-unknown release gate now hard-couples web releases to three manually verified column lists with no mechanical plugin-contract check; a single wrong column name fails that type and blocks releases. The least certain name is MINOR (claude only) — The new data is collected but unconsumed (no topology/flow/security-findings reader), and L5 — Docs / ADR consistencyNo gate-level issues — both models agree the 46→49 rewrite is complete and correct (claude exhaustively grepped remaining MINOR (claude only) — The runbook documents only the MINOR (claude only; interacts with the L2 MAJOR) — The collector catalog (49) and UI registry (46) have now diverged with nothing stating the superset is intentional; a future contributor can plausibly "fix" either number. Resolving the L2 MAJOR should also settle this. MINOR (claude only, informational) — The regenerated 3. Suggestions
4. VerdictTwo MAJOR findings stand after chair verification against the base code: the unregistered types visibly distort the landing-page fleet KPIs the moment the first ENI sync completes (L2), and the ENI query's test-pinned data-scope contract is false as written (L4, flagged independently by both models). Both are cheaply fixable within this PR. IMAGE_COVERAGE: NOT_REQUIRED Triggered by commit |
… 49-type sweep Addresses AI review: - Provenance comments for the three new queries (columns verified in the pinned aws@0.142.0 table sources); the ENI comment is scoped to private IPv4. - rds_proxy also derives `name` from its Name tag, like its siblings. - steampipe-quota-and-staleness.md records the measured ENI cardinality, the per-row write cost inside the 120 s Aurora reserve and when to batch. - The remaining 46-type references move to 49 (scripts/CLAUDE.md, graph-read-contract.md); the generated docs/runbooks and scripts AGENTS.md get the matching lines and fresh markers (both were in sync before, and check_ai_context.py reports them in sync). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review response (commit 55f755b):
|
|
Superseded by #258, which now carries both the collector and the web change: reviewed separately, each half was judged incomplete without the other. |
Summary
Collector half of a topology discovery change modeled on aws-samples/sample-network-topology-visualizer, which resolves every private IP to the resource owning its ENI and binds clients to cluster endpoints.
sync_lambda.pyadds three read-only Steampipe inventory types:eni(aws_ec2_network_interface): interface type, description, requester, attached instance, VPC/subnet/AZ and private IPs. Association columns are not collected.rds_cluster(aws_rds_db_cluster): writer, reader and custom endpoints, members and security groups.master_user_nameis not collected.rds_proxy(aws_rds_db_proxy): endpoint and placement. Theauthcolumn (Secrets Manager ARNs) androle_arnare not collected.db_cluster_identifier.REQUIRED_CATALOG_TYPESand the runbook catalog counts move from 46 to 49.ec2:Describe*andrds:Describe*, and member accounts useReadOnlyAccess. Column names were checked against the pinned plugin 0.142.0 table sources.Rollout order
Merge #258 (web) first. It registers the three types and keeps ENIs out of dashboard fleet totals. It treats the new types as optional enrichment, so it deploys cleanly while they are not yet collected.
web/**orterraform/foundation/**paths, so it starts neither Deploy Web nor an automatic Terraform plan.dev, review it (expected: in-place update of the inventory sync Lambda code only), and apply the saved plan.Between steps 2 and 3, a Deploy Web run would fail the runtime gate because the pin requires 49 types. Do step 3 right after step 2.
The generated
docs/runbooks/AGENTS.mdandscripts/AGENTS.mdwere in sync with theirCLAUDE.mdsources before this change. Only the count lines changed, so they get exactly those lines plus fresh markers, andcheck_ai_context.pyreports both in sync.Tests
PYTHONPATH=. pytest -q scripts/v2/steampipe(Python 3.12): 267 passed, including the newtest_sync_topology_discovery.py.node --test scripts/v2/ci/runtime-release.test.mjs: 83 passed (the pinned membership must equal the source catalog).🤖 Generated with Claude Code